import cachepromise_arrayofstring from "./cachepromise-arrayofstring";
import { CatalogueConfig, isSideBarItems } from "./catalogueconfig";
import { handlecatalogueconfig } from "./handlecatalogueconfig";

// export function changelinkmd(
//     states: StateType,
//     tmpcontainer: HTMLElement,
//     catalogueurl: string,
//     menulist: string[]
// ) {
//     const { cachetitle } = states;
//     var links: HTMLAnchorElement[] = Array.from(
//         tmpcontainer.querySelectorAll("a")
//     );
//     links.forEach((a) => {
//         var ahref = a.getAttribute("href");
//         // var b = new URL(location.href);
//         if (ahref && ahref?.endsWith(".md")) {
//             var realmdpath = isrelativepath(ahref)
//                 ? new URL(ahref, catalogueurl)
//                 : ahref;
//             let path = urlclearhashandsearch(String(realmdpath));
//             path = path.endsWith(".md") ? path : path + ".md";
//             let tmppath = path;
//             if (!new URL(tmppath).pathname.endsWith(".md")) {
//                 handleextralink(a);
//                 return;
//             }
//             menulist.push(tmppath);
//             let mdtitle = a.textContent || "";
//             if (mdtitle && !cachetitle.get(tmppath)) {
//                 cachetitle.set(tmppath, mdtitle);
//             }
//             // b.hash = "#" + tmppath;
//             // a.href = b.href;
//             // a.dataset.href = tmppath;
//             a.href = getlinkhrefmd(tmppath);
//             a.classList.add(
//                 ..."mui-btn mui-btn-primary mui-btn-outlined mybutton-8731e6c5bb5148e49e14cca7cdfa73e8".split(
//                     " "
//                 )
//             );
//             a.classList.add("navigate");
//             a.classList.add(
//                 ..."mui-btn mui-btn-primary mui-btn-outlined mybutton-8731e6c5bb5148e49e14cca7cdfa73e8".split(
//                     " "
//                 )
//             );
//             a.classList.add("sidebar-link");
//             return;
//         } else {
//             handleextralink(a);
//             return;
//         }
//     });
// }
// export function addlinkhomeandsummary(
//     // catalogueurl: string,
//     homefile: string,
//     tmpcontainer: HTMLElement,
//     hometitle: string
// ) {
//     const linkanddescriptions = [
//         // { u: catalogueurl, d: "目录" },
//         { u: homefile, d: hometitle },
//     ];
//     linkanddescriptions.forEach(({ u, d }) => {
//         const cataloguelinkhtml = `<a href="${u}" class="mui-btn mui-btn-primary mui-btn-outlined">${escapeHtml(
//             d
//         )}</a><br/>`;
//         tmpcontainer.insertAdjacentHTML("afterbegin", cataloguelinkhtml);
//     });
// }
// export function removerepeatlinks(tmpcontainer: HTMLElement) {
//     const hrefs: string[] = Array.from(
//         new Set(
//             Array.from(tmpcontainer.querySelectorAll("a")).map((a) =>
//                 a.getAttribute("href")
//             )
//         )
//     ).filter((e) => typeof e === "string") as string[];
//     hrefs.forEach((href) => {
//         tmpcontainer.querySelectorAll(`a[href="${href}"]`).forEach((e, i) => {
//             if (i > 0) {
//                 let parent = e.parentNode;
//                 e.remove();
//                 if (parent && !parent.childNodes.length) {
//                     let remove = Reflect.get(parent, "remove");
//                     if ("function" === typeof remove) {
//                         Reflect.apply(remove, parent, []);
//                     }
//                 }
//             }
//         });
//     });
// }
export const generateinitialdata = cachepromise_arrayofstring(
    async function generateinitialdata(
        catalogueurl: string,
        catalogueraw: string,
        baseurl: string
    ): Promise<{
        cachetitle: Map<string, string>;
        menulist: string[];
        catalogue: CatalogueConfig;
    }> {
        const cachetitle = new Map<string, string>();
        const menulist: string[] = [];
        const catalogue: CatalogueConfig = [];
        const rawcatalogue = JSON.parse(catalogueraw);

        if (!(Array.isArray(rawcatalogue) && isSideBarItems(rawcatalogue))) {
            throw new Error("catalogue need to be an array of SideBarItem");
        }
        handlecatalogueconfig(
            rawcatalogue,
            menulist,
            cachetitle,
            baseurl,
            catalogueurl
        );
        rawcatalogue.forEach((item) => {
            catalogue.push(item);
        });
        var tmpmenuset = new Set(menulist);
        menulist.length = 0;
        tmpmenuset.forEach((url) => {
            menulist.push(url);
        });
        return { cachetitle, menulist, catalogue };
    }
);
